<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<!-- Mirrored from www.wolfssl.com/wolfSSL/Docs-wolfssl-manual-17-4-wolfssl-api-callbacks.html by HTTrack Website Copier/3.x [XR&CO'2014], Tue, 17 Jan 2017 13:33:45 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=UTF-8" /><!-- /Added by HTTrack -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="Generator" content="iWeb 3.0.4"/>
<meta name="iWeb-Build" content="local-build-20170103"/>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
<meta name="viewport" content="width=770"/>
<title>wolfSSL - Docs | wolfSSL Manual - Chapter 17.4 (API Reference, Callbacks)</title>
<link rel="stylesheet" type="text/css" media="screen,print" href="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/Docs-wolfssl-manual-17-4-wolfssl-api-callbacks.css"/>
<!--[if lt IE 8]><link rel='stylesheet' type='text/css' media='screen,print' href='Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/Docs-wolfssl-manual-17-4-wolfssl-api-callbacksIE.css'/><![endif]-->
<!--[if gte IE 8]><link rel='stylesheet' type='text/css' media='screen,print' href='Media/IE8.css'/><![endif]-->
<script type="text/javascript" src="Scripts/iWebSite.js"></script>
<script type="text/javascript" src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/Docs-wolfssl-manual-17-4-wolfssl-api-callbacks.js"></script>
<meta name="description" content="wolfSSL (formerly CyaSSL) API reference functions related to the callbacks available in wolfSSL embedded SSL."/><meta name="keywords" content="embedded ssl, ssl library, lightweight ssl, open source ssl, open source web server, tls 1.2, embedded security, small openssl, smart grid, connected home, ecc, suite b, fips, encryption security software, ssl inspection"/><meta name="robots" content="follow,index"/> <script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','../../www.google-analytics.com/analytics.js','ga');ga('create','UA-64826966-1','auto');ga('send','pageview');</script>
 
<script>//<![CDATA[
window.zEmbed||function(e,t){var n,o,d,i,s,a=[],r=document.createElement("iframe");window.zEmbed=function(){a.push(arguments)},window.zE=window.zE||window.zEmbed,r.src="javascript:false",r.title="",r.role="presentation",(r.frameElement||r).style.cssText="display: none",d=document.getElementsByTagName("script"),d=d[d.length-1],d.parentNode.insertBefore(r,d),i=r.contentWindow,s=i.document;try{o=s}catch(c){n=document.domain,r.src='javascript:var d=document.open();d.domain="'+n+'";void(0);',o=s}o.open()._l=function(){var o=this.createElement("script");n&&(this.domain=n),o.id="js-iframe-async",o.src=e,this.t=+new Date,this.zendeskHost=t,this.zEQueue=a,this.body.appendChild(o)},o.write('<body onload="document._l();">'),o.close()}("../../assets.zendesk.com/embeddable_framework/main.js","wolfssl.zendesk.com");
//]]></script>
  </head>
<body style="background: rgb(255, 255, 255); margin: 0pt; " onload="onPageLoad();">
<div style="text-align: center; ">
<div style="margin-bottom: 20px; margin-left: auto; margin-right: auto; margin-top: 20px; overflow: hidden; position: relative; word-wrap: break-word;  background: rgb(255, 255, 255); text-align: left; width: 770px; " id="body_content">
<div style="float: left; margin-left: 0px; position: relative; width: 770px; z-index: 0; " id="nav_layer">
<div style="height: 0px; line-height: 0px; " class="bumper"> </div>
<div style="clear: both; height: 0px; line-height: 0px; " class="spacer"> </div>
</div>
<div style="float: left; height: 0px; line-height: 0px; margin-left: 0px; position: relative; width: 770px; z-index: 10; " id="header_layer">
<div style="height: 0px; line-height: 0px; " class="bumper"> </div>
</div>
<div style="margin-left: 0px; position: relative; width: 770px; z-index: 5; " id="body_layer">
<div style="height: 0px; line-height: 0px; " class="bumper"> </div>
<div id="id1" style="height: 38px; left: 375px; position: absolute; top: 157px; width: 361px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_361_38" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style">wolfSSL Manual</p>
</div>
</div>
</div>
<div id="id2" style="height: 24px; left: 193px; position: absolute; top: 122px; width: 268px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_268_24" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_1"><a class="class1" title="Docs.html" href="Docs.html">Docs</a> <span class="style">-&gt;</span> <span class="style_1">wolfSSL Manual</span></p>
</div>
</div>
</div>
<div style="height: 1px; width: 698px;  height: 1px; left: 37px; position: absolute; top: 220px; width: 698px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 698px; ">
<img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_1.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 698px; "/>
</div>
</div>
<div style="height: 37px; width: 545px;  height: 37px; left: 191px; position: absolute; top: 80px; width: 545px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 545px; ">
<img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_2.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 545px; "/>
</div>
</div>
<div id="id3" style="height: 25px; left: 200px; position: absolute; top: 84px; width: 43px; z-index: 1; " class="style_SkipStroke_1 shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_43_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_2"><a class="class2" title="Home.html" href="Home.html">Home</a></p>
</div>
</div>
</div>
<div id="id4" style="height: 25px; left: 365px; position: absolute; top: 84px; width: 72px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_72_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_3"><a class="class3" title="https://wolfssl.com/wolfSSL/download/downloadForm.php" href="https://wolfssl.com/wolfSSL/download/downloadForm.php">Download</a></p>
</div>
</div>
</div>
<div id="id5" style="height: 25px; left: 439px; position: absolute; top: 84px; width: 59px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_59_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_3"><a class="class4" title="License.html" href="License.html">License</a></p>
</div>
</div>
</div>
<div id="id6" style="height: 25px; left: 499px; position: absolute; top: 84px; width: 44px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_44_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_3"><a class="class5" title="Blog/Blog.html" href="Blog/Blog.html">Blog</a></p>
</div>
</div>
</div>
<div id="id7" style="height: 25px; left: 589px; position: absolute; top: 84px; width: 80px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_80_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_3"><a class="class6" title="Community.html" href="Community.html">Community</a></p>
</div>
</div>
</div>
<div style="height: 36px; width: 1px;  height: 36px; left: 245px; position: absolute; top: 81px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_3.png" alt="" style="height: 36px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 37px; width: 1px;  height: 37px; left: 296px; position: absolute; top: 80px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_4.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 36px; width: 1px;  height: 36px; left: 363px; position: absolute; top: 81px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_5.png" alt="" style="height: 36px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 36px; width: 1px;  height: 36px; left: 438px; position: absolute; top: 81px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_6.png" alt="" style="height: 36px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 37px; width: 1px;  height: 37px; left: 498px; position: absolute; top: 80px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_7.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 37px; width: 1px;  height: 37px; left: 589px; position: absolute; top: 80px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_8.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div id="id8" style="height: 25px; left: 671px; position: absolute; top: 84px; width: 61px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_61_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_3"><a class="class7" title="Contact.html" href="Contact.html">Contact</a></p>
</div>
</div>
</div>
<div id="id9" style="height: 25px; left: 249px; position: absolute; top: 84px; width: 44px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_44_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_2"><a class="class8" title="About.html" href="About.html">About</a></p>
</div>
</div>
</div>
<div style="height: 36px; width: 1px;  height: 36px; left: 670px; position: absolute; top: 81px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_9.png" alt="" style="height: 36px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div id="id10" style="height: 25px; left: 298px; position: absolute; top: 84px; width: 63px; z-index: 1; " class="style_SkipStroke_1 shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_63_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_3"><a class="class9" title="Products.html" href="Products.html">Products</a></p>
</div>
</div>
</div>
<div id="id11" style="height: 25px; left: 549px; position: absolute; top: 84px; width: 41px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_41_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_2"><a class="class10" title="Docs.html" href="Docs.html">Docs</a></p>
</div>
</div>
</div>
<div style="height: 37px; width: 1px;  height: 37px; left: 545px; position: absolute; top: 80px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_10.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div id="id12" style="height: 27px; left: 634px; position: absolute; top: 224px; width: 102px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_102_27" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_4"><a class="class11" title="Docs-wolfssl-manual-17-5-wolfssl-api-error-debugging.html" href="Docs-wolfssl-manual-17-5-wolfssl-api-error-debugging.html">Next Chapter</a></p>
</div>
</div>
</div>
<div id="id13" style="height: 25px; left: 35px; position: absolute; top: 224px; width: 125px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_125_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_5"><a class="class12" title="Docs-wolfssl-manual-17-3-wolfssl-api-context-session-setup.html" href="Docs-wolfssl-manual-17-3-wolfssl-api-context-session-setup.html">Previous Chapter</a></p>
</div>
</div>
</div>
<div id="id14" style="height: 27px; left: 59px; position: absolute; top: 190px; width: 196px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_196_27" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_6"><a class="class13" title="https://www.wolfssl.com/documentation/wolfSSL-Manual.pdf" href="https://www.wolfssl.com/documentation/wolfSSL-Manual.pdf">Download wolfSSL Manual (PDF)</a></p>
</div>
</div>
</div>
<div style="height: 22px; width: 22px;  height: 22px; left: 33px; position: absolute; top: 191px; width: 22px; z-index: 1; " class="tinyText style_SkipStroke_2">
<img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/PDF.png" alt="" style="border: none; height: 22px; width: 22px; "/>
</div>
<div id="id15" style="height: 25px; left: 323px; position: absolute; top: 224px; width: 125px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_125_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_7"><a title="Docs-wolfssl-manual-toc.html" href="Docs-wolfssl-manual-toc.html">Table of Contents</a></p>
</div>
</div>
</div>
<div id="id16" style="height: 15546px; left: 35px; position: absolute; top: 281px; width: 701px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_701_15546" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-top: 0pt; " class="paragraph_style_8">Chapter 17: wolfSSL API Reference<br/></p>
<p class="paragraph_style_8"><br/></p>
<p class="paragraph_style_9">17.4  Callbacks<br/></p>
<p class="paragraph_style_9"><br/></p>
<p class="paragraph_style_10">The functions in this section have to do with callbacks which the application is able to set in relation to wolfSSL.<span class="style_2"><br/></span></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<div class="paragraph paragraph_style_11"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_11.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12"><br/></p>
<p class="paragraph_style_12">CyaSSL_SetIOReadCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">void CyaSSL_SetIOReadCtx(CYASSL* ssl, void *ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function registers a context for the SSL session’s receive callback function.  By default, CyaSSL sets the file descriptor passed to CyaSSL_set_fd() as the context when CyaSSL is using the system’s TCP library.  If you’ve registered your own receive callback you may want to set a specific context for the session.  For example, if you’re using memory buffers the context may be a pointer to a structure describing where and how to access the memory buffers. <br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">No return values are used for this function.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ssl</span> - pointer to the SSL session, created with CyaSSL_new().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ctx</span> - pointer to the context to be registered with the SSL session’s (<span class="style_3">ssl</span>) receive callback function.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">int sockfd;<br/></p>
<p class="paragraph_style_14">CYASSL* ssl = 0;<br/></p>
<p class="paragraph_style_14">...<br/></p>
<p class="paragraph_style_14">// Manually setting the socket fd as the receive CTX, for example<br/></p>
<p class="paragraph_style_14">CyaSSL_SetIOReadCtx(ssl, &amp;sockfd);<br/></p>
<p class="paragraph_style_14">...<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_SetIORecv<br/></p>
<p class="paragraph_style_10">CyaSSL_SetIOSend<br/></p>
<p class="paragraph_style_10">CyaSSL_SetIOWriteCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_12.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_12"><br/></p>
<p class="paragraph_style_12">CyaSSL_SetIOWriteCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">void CyaSSL_SetIOWriteCtx(CYASSL* ssl, void *ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function registers a context for the SSL session’s send callback function.  By default, CyaSSL sets the file descriptor passed to CyaSSL_set_fd() as the context when CyaSSL is using the system’s TCP library.  If you’ve registered your own send callback you may want to set a specific context for the session.  For example, if you’re using memory buffers the context may be a pointer to a structure describing where and how to access the memory buffers. <br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">No return values are used for this function.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ssl</span> - pointer to the SSL session, created with CyaSSL_new().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ctx</span> - pointer to the context to be registered with the SSL session’s (<span class="style_3">ssl</span>) send callback function.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">int sockfd;<br/></p>
<p class="paragraph_style_14">CYASSL* ssl = 0;<br/></p>
<p class="paragraph_style_14">...<br/></p>
<p class="paragraph_style_14">// Manually setting the socket fd as the send CTX, for example<br/></p>
<p class="paragraph_style_14">CyaSSL_SetIOSendCtx(ssl, &amp;sockfd);<br/></p>
<p class="paragraph_style_14">...<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_SetIORecv<br/></p>
<p class="paragraph_style_10">CyaSSL_SetIOSend<br/></p>
<p class="paragraph_style_10">CyaSSL_SetIOReadCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_13.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_12"><br/></p>
<p class="paragraph_style_12">CyaSSL_SetIOReadFlags<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">void CyaSSL_SetIOReadFlags( CYASSL* ssl, int flags);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function sets the flags for the receive callback to use for the given SSL session.  The receive callback could be either the default CyaSSL EmbedReceive callback, or a custom callback specified by the user (see  CyaSSL_SetIORecv). The default flag value is set internally by CyaSSL to the value of 0.  <br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">The default CyaSSL receive callback uses the recv() function to receive data from the socket.  From the recv() man page:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">“The flags argument to a recv() function is formed by or'ing one or more of the values:<br/></p>
<p class="paragraph_style_10"><br/></p>
<ol>
<li style="line-height: 14px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_15"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span>MSG_OOBprocess out-of-band data<br/></p>
</li>
<li style="line-height: 14px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_15"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span>MSG_PEEKpeek at incoming message<br/></p>
</li>
<li style="line-height: 14px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_15"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span>MSG_WAITALLwait for full request or error<br/></p>
</li>
</ol>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">The MSG_OOB flag requests receipt of out-of-band data that would not be received in the normal data stream.  Some protocols place expedited data at the head of the normal data queue, and thus this flag cannot be used with such protocols.  The MSG_PEEK flag causes the receive operation to return data from the beginning of the receive queue without removing that data from the queue.  Thus, a subsequent receive call will return the same data.  The MSG_WAITALL flag requests that the operation block until the full request is satisfied.  However, the call may still return less data than requested if a signal is caught, an error or disconnect occurs, or the next data to be received is of a different type than that returned.”<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">No return values are used for this function.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ssl</span> - pointer to the SSL session, created with CyaSSL_new().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">flags</span> - value of the I/O read flags for the specified SSL session (<span class="style_3">ssl</span>).<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">CYASSL* ssl = 0;<br/></p>
<p class="paragraph_style_14">...<br/></p>
<p class="paragraph_style_14">// Manually setting recv flags to 0<br/></p>
<p class="paragraph_style_14">CyaSSL_SetIOReadFlags(ssl, 0);<br/></p>
<p class="paragraph_style_14">...<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_SetIORecv<br/></p>
<p class="paragraph_style_10">CyaSSL_SetIOSend<br/></p>
<p class="paragraph_style_10">CyaSSL_SetIOReadCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_14.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_12"><br/></p>
<p class="paragraph_style_12">CyaSSL_SetIOWriteFlags<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">void CyaSSL_SetIOWriteFlags( CYASSL* ssl, int flags);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function sets the flags for the send callback to use for the given SSL session.  The send callback could be either the default CyaSSL EmbedSend callback, or a custom callback specified by the user (see  CyaSSL_SetIOSend). The default flag value is set internally by CyaSSL to the value of 0.  <br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">The default CyaSSL send callback uses the send() function to send data from the socket.  From the send() man page:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">“The flags parameter may include one or more of the following:<br/></p>
<p class="paragraph_style_10"><br/></p>
<ol>
<li style="line-height: 14px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_15"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span>#define MSG_OOB        0x1  /* process out-of-band data */<br/></p>
</li>
<li style="line-height: 14px; padding-left: 30px; text-indent: -30px; " class="full-width">
<p style="text-indent: -30px; " class="paragraph_style_15"><span style="font-size: 0px; position: relative; top: -7px; " class="Bullet"></span><span style="width: 30px; " class="inline-block"></span>#define MSG_DONTROUTE  0x4  /* bypass routing, use direct interface */<br/></p>
</li>
</ol>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">The flag MSG_OOB is used to send ``out-of-band'' data on sockets that support this notion (e.g.  SOCK_STREAM); the underlying protocol must also support ``out-of-band'' data.  MSG_DONTROUTE is usually used only by diagnostic or routing programs.”<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">No return values are used for this function.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ssl</span> - pointer to the SSL session, created with CyaSSL_new().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">flags</span> - value of the I/O send flags for the specified SSL session (<span class="style_3">ssl</span>).<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">CYASSL* ssl = 0;<br/></p>
<p class="paragraph_style_14">...<br/></p>
<p class="paragraph_style_14">// Manually setting send flags to 0<br/></p>
<p class="paragraph_style_14">CyaSSL_SetIOSendFlags(ssl, 0);<br/></p>
<p class="paragraph_style_14">...<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_SetIORecv<br/></p>
<p class="paragraph_style_10">CyaSSL_SetIOSend<br/></p>
<p class="paragraph_style_10">CyaSSL_SetIOReadCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_15.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_12"><br/></p>
<p class="paragraph_style_12">CyaSSL_SetIORecv<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">void CyaSSL_SetIORecv(CYASSL_CTX* ctx, CallbackIORecv callback);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">typedef int (*CallbackIORecv)(char *buf, int sz, void *ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function registers a receive callback for CyaSSL to get input data.  By default, CyaSSL uses EmbedReceive() as the callback which uses the system’s TCP recv() function.  The user can register a function to get input from memory, some other network module, or from anywhere.  Please see the EmbedReceive() function in <span class="style_3">src/io.c</span> as a guide for how the function should work and for error codes.  In particular, <span class="style_3">IO_ERR_WANT_READ</span> should be returned for non blocking receive when no data is ready. <br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">No return values are used for this function.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ctx</span> - pointer to the SSL context, created with CyaSSL_CTX_new().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">callback</span> - function to be registered as the receive callback for the CyaSSL context, <span class="style_3">ctx</span>. The signature of this function must follow that as shown above in the Synopsis section.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">CYASSL_CTX* ctx = 0;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">// Receive callback prototype<br/></p>
<p class="paragraph_style_14">int MyEmbedReceive(CYASSL *ssl, char *buf, int sz, void *ctx); <br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">// Register the custom receive callback with CyaSSL<br/></p>
<p class="paragraph_style_14">CyaSSL_SetIORecv(ctx, MyEmbedReceive);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">int MyEmbedReceive(CYASSL *ssl, char *buf, int sz, void *ctx)                   <br/></p>
<p class="paragraph_style_14">{<br/></p>
<p class="paragraph_style_14">// custom EmbedReceive function<br/></p>
<p class="paragraph_style_14">}  <br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_SetIOSend<br/></p>
<p class="paragraph_style_10">CyaSSL_SetIOReadCtx<br/></p>
<p class="paragraph_style_10">CyaSSL_SetIOWriteCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_16.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_12"><br/></p>
<p class="paragraph_style_12">CyaSSL_SetIOSend<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">void CyaSSL_SetIOSend(CYASSL_CTX* ctx, CallbackIOSend callback);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">typedef int (*CallbackIOSend)(char *buf, int sz, void *ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function registers a send callback for CyaSSL to write output data.  By default, CyaSSL uses EmbedSend() as the callback which uses the system’s TCP send() function.  The user can register a function to send output to memory, some other network module, or to anywhere.  Please see the EmbedSend() function in <span class="style_3">src/io.c</span> as a guide for how the function should work and for error codes.  In particular, <span class="style_3">IO_ERR_WANT_WRITE</span> should be returned for non blocking send when the action cannot be taken yet.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">No return values are used for this function.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ctx</span> - pointer to the SSL context, created with CyaSSL_CTX_new().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">callback</span> - function to be registered as the send callback for the CyaSSL context, <span class="style_3">ctx</span>. The signature of this function must follow that as shown above in the Synopsis section.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">CYASSL_CTX* ctx = 0;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">// Receive callback prototype<br/></p>
<p class="paragraph_style_14">int MyEmbedSend(CYASSL *ssl, char *buf, int sz, void *ctx); <br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">// Register the custom receive callback with CyaSSL<br/></p>
<p class="paragraph_style_14">CyaSSL_SetIOSend(ctx, MyEmbedSend);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">int MyEmbedSend(CYASSL *ssl, char *buf, int sz, void *ctx)                   <br/></p>
<p class="paragraph_style_14">{<br/></p>
<p class="paragraph_style_14">// custom EmbedSend function<br/></p>
<p class="paragraph_style_14">}  <br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_SetIORecv<br/></p>
<p class="paragraph_style_10">CyaSSL_SetIOReadCtx<br/></p>
<p class="paragraph_style_10">CyaSSL_SetIOWriteCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_17.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_CTX_SetCACb<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">void CyaSSL_CTX_SetCACb(CYASSL_CTX* ctx, CallbackCACache callback); <br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">typedef void (*CallbackCACache)(unsigned char* der, int sz, int type);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function registers a callback with the SSL context (CYASSL_CTX) to be called when a new CA certificate is loaded into CyaSSL.  The callback is given a buffer with the DER-encoded certificate.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">This function has no return value.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ctx</span> - pointer to the SSL context, created with CyaSSL_CTX_new().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">callback</span> - function to be registered as the CA callback for the CyaSSL context, <span class="style_3">ctx</span>. The signature of this function must follow that as shown above in the Synopsis section.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">CYASSL_CTX* ctx = 0;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">// CA callback prototype<br/></p>
<p class="paragraph_style_14">int MyCACallback(unsigned char *der, int sz, int type); <br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">// Register the custom CA callback with the SSL context<br/></p>
<p class="paragraph_style_14">CyaSSL_CTX_SetCACb(ctx, MyCACallback);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">int MyCACallback(unsigned char* der, int sz, int type)                   <br/></p>
<p class="paragraph_style_14">{<br/></p>
<p class="paragraph_style_14">/* custom CA callback function, DER-encoded cert<br/></p>
<p class="paragraph_style_14">        located in “der” of size “sz” with type “type” */<br/></p>
<p class="paragraph_style_14">}  <br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_load_verify_locations<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_18.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_connect_ex<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">int CyaSSL_connect_ex(CYASSL* ssl, HandShakeCallBack hsCb, <br/></p>
<p class="paragraph_style_10">         TimeoutCallBack toCb,                   <br/></p>
<p class="paragraph_style_10">                                             Timeval timeout);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">typedef int (*HandShakeCallBack)(HandShakeInfo*);<br/></p>
<p class="paragraph_style_10">typedef int (*TimeoutCallBack)(TimeoutInfo*);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">typedef struct timeval Timeval;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">typedef struct handShakeInfo_st {<br/></p>
<p class="paragraph_style_14">char   cipherName[MAX_CIPHERNAME_SZ + 1];  /* negotiated name */<br/></p>
<p class="paragraph_style_14">char   packetNames[MAX_PACKETS_HANDSHAKE][MAX_PACKETNAME_SZ+1];<br/></p>
<p class="paragraph_style_14">                                          /* SSL packet names */<br/></p>
<p class="paragraph_style_14">int    numberPackets;                 /* actual # of packets  */<br/></p>
<p class="paragraph_style_14">int    negotiationError;              /* cipher/parameter err */<br/></p>
<p class="paragraph_style_14">} HandShakeInfo;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">typedef struct timeoutInfo_st {<br/></p>
<p class="paragraph_style_14">chartimeoutName[MAX_TIMEOUT_NAME_SZ +1]; /*timeout Name*/<br/></p>
<p class="paragraph_style_14">int        flags;                            /* for future use*/<br/></p>
<p class="paragraph_style_14">int        numberPackets;              /* actual # of packets */<br/></p>
<p class="paragraph_style_14">PacketInfo packets[MAX_PACKETS_HANDSHAKE]; /* list of packets */<br/></p>
<p class="paragraph_style_14">Timeval    timeoutValue;              /* timer that caused it */<br/></p>
<p class="paragraph_style_14">} TimeoutInfo;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">typedef struct packetInfo_st {<br/></p>
<p class="paragraph_style_14">      char        packetName[MAX_PACKETNAME_SZ + 1]; /* SSL name */<br/></p>
<p class="paragraph_style_14">      Timeval     timestamp;               /* when it occured*/<br/></p>
<p class="paragraph_style_14">      unsigned char value[MAX_VALUE_SZ];   /* if fits, it's here */<br/></p>
<p class="paragraph_style_14">      unsigned char* bufferValue;       /* otherwise here (non 0) */<br/></p>
<p class="paragraph_style_14">      int         valueSz;              /* sz of value or buffer */<br/></p>
<p class="paragraph_style_14">} PacketInfo;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">CyaSSL_connect_ex() is an extension that allows a HandShake Callback to be set.  This can be useful in embedded systems for debugging support when a debugger isn’t available and sniffing is impractical.  The HandShake Callback will be called whether or not a handshake error occurred.  No dynamic memory is used since the maximum number of SSL packets is known.  Packet names can be accessed through <span class="style_3">packetNames[]</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">The connect extension also allows a Timeout Callback to be set along with a timeout value.  This is useful if the user doesn’t want to wait for the TCP stack to timeout. <br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">This extension can be called with either, both, or neither callbacks.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">This function is only available when CyaSSL is compiled with the <span class="style_4">CYASSL_CALLBACKS</span> define.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return <span class="style_3">SSL_SUCCESS</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">GETTIME_ERROR</span> will be returned if gettimeofday() encountered an error.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">SETITIMER_ERROR</span> will be returned if setitimer() encountered an error.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">SIGACT_ERROR</span> will be returned if sigaction() encountered an error.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">SSL_FATAL_ERROR</span> will be returned if the underlying SSL_connect() call encountered an error.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_accept_ex<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_19.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_12">CyaSSL_accept_ex<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">int CyaSSL_accept_ex(CYASSL* ssl, HandShakeCallBack hsCb, <br/></p>
<p class="paragraph_style_10">      TimeoutCallBack toCb,                   <br/></p>
<p class="paragraph_style_10">                                          Timeval timeout);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">typedef int (*HandShakeCallBack)(HandShakeInfo*);<br/></p>
<p class="paragraph_style_10">typedef int (*TimeoutCallBack)(TimeoutInfo*);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">typedef struct timeval Timeval;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">typedef struct handShakeInfo_st {<br/></p>
<p class="paragraph_style_14">char   cipherName[MAX_CIPHERNAME_SZ + 1];  /* negotiated name */<br/></p>
<p class="paragraph_style_14">char   packetNames[MAX_PACKETS_HANDSHAKE][MAX_PACKETNAME_SZ+1];<br/></p>
<p class="paragraph_style_14">                                          /* SSL packet names */<br/></p>
<p class="paragraph_style_14">int    numberPackets;                 /* actual # of packets  */<br/></p>
<p class="paragraph_style_14">int    negotiationError;              /* cipher/parameter err */<br/></p>
<p class="paragraph_style_14">} HandShakeInfo;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">typedef struct timeoutInfo_st {<br/></p>
<p class="paragraph_style_14">chartimeoutName[MAX_TIMEOUT_NAME_SZ +1]; /*timeout Name*/<br/></p>
<p class="paragraph_style_14">int        flags;                            /* for future use*/<br/></p>
<p class="paragraph_style_14">int        numberPackets;              /* actual # of packets */<br/></p>
<p class="paragraph_style_14">PacketInfo packets[MAX_PACKETS_HANDSHAKE]; /* list of packets */<br/></p>
<p class="paragraph_style_14">Timeval    timeoutValue;              /* timer that caused it */<br/></p>
<p class="paragraph_style_14">} TimeoutInfo;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">typedef struct packetInfo_st {<br/></p>
<p class="paragraph_style_14">      char        packetName[MAX_PACKETNAME_SZ + 1]; /* SSL name */<br/></p>
<p class="paragraph_style_14">      Timeval     timestamp;               /* when it occured*/<br/></p>
<p class="paragraph_style_14">      unsigned char value[MAX_VALUE_SZ];   /* if fits, it's here */<br/></p>
<p class="paragraph_style_14">      unsigned char* bufferValue;       /* otherwise here (non 0) */<br/></p>
<p class="paragraph_style_14">      int         valueSz;              /* sz of value or buffer */<br/></p>
<p class="paragraph_style_14">} PacketInfo;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">CyaSSL_accept_ex() is an extension that allows a HandShake Callback to be set.  This can be useful in embedded systems for debugging support when a debugger isn’t available and sniffing is impractical.  The HandShake Callback will be called whether or not a handshake error occurred.  No dynamic memory is used since the maximum number of SSL packets is known.  Packet names can be accessed through <span class="style_3">packetNames[]</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">The connect extension also allows a Timeout Callback to be set along with a timeout value.  This is useful if the user doesn’t want to wait for the TCP stack to timeout. <br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">This extension can be called with either, both, or neither callbacks.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">This function is only available when CyaSSL is compiled with the <span class="style_4">CYASSL_CALLBACKS</span> define.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return <span class="style_3">SSL_SUCCESS</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">GETTIME_ERROR</span> will be returned if gettimeofday() encountered an error.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">SETITIMER_ERROR</span> will be returned if setitimer() encountered an error.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">SIGACT_ERROR</span> will be returned if sigaction() encountered an error.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">SSL_FATAL_ERROR</span> will be returned if the underlying SSL_accept() call encountered an error.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_connect_ex<br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<div class="paragraph paragraph_style_11"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_20.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_SetLoggingCb<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ctaocrypt/logging.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">int CyaSSL_SetLoggingCb(CyaSSL_Logging_cb log_function);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">typedef void (*CyaSSL_Logging_cb)(const int logLevel, const char *const logMessage);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function registers a logging callback that will be used to handle the CyaSSL log message.  By default, if the system supports it fprintf() to <span class="style_3">stderr</span> is used but by using this function anything can be done by the user.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful this function will return <span class="style_3">0</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">BAD_FUNC_ARG</span> is the error that will be returned if a function pointer is not provided.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">log_function</span> - function to register as a logging callback.  Function signature must follow the above prototype.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">int ret = 0;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">// Logging callback prototype<br/></p>
<p class="paragraph_style_14">void MyLoggingCallback(const int logLevel, const char* const logMessage);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">// Register the custom logging callback with CyaSSL<br/></p>
<p class="paragraph_style_14">ret = CyaSSL_SetLoggingCb(myLogCallback);<br/></p>
<p class="paragraph_style_14">if (ret != 0) {<br/></p>
<p class="paragraph_style_14">// failed to set logging callback<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">void MyLoggingCallback(const int logLevel, const char* const logMessage)<br/></p>
<p class="paragraph_style_14">{<br/></p>
<p class="paragraph_style_14">// custom logging function<br/></p>
<p class="paragraph_style_14">}  <br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_Debugging_ON<br/></p>
<p class="paragraph_style_10">CyaSSL_Debugging_OFF<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_21.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_SetTlsHmacInner<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">int CyaSSL_SetTlsHmacInner(CYASSL* ssl, unsigned char* inner, word32 sz,<br/></p>
<p class="paragraph_style_10">       int content, int verify);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to set the Hmac Inner vector for message sending/receiving.  The result is written to <span class="style_3">inner</span> which should be at least CyaSSL_GetHmacSize() bytes.  The size of the message is specified by <span class="style_3">sz</span>, <span class="style_3">content</span> is the type of message, and <span class="style_3">verify</span> specifies whether this is a verification of a peer message. Valid for cipher types excluding <span class="style_3">CYASSL_AEAD_TYPE</span>.  <br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return 1.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">BAD_FUNC_ARG</span> will be returned for an error state. <br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_GetBulkCipher()<br/></p>
<p class="paragraph_style_10">CyaSSL_GetHmacType()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_22.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_CTX_SetMacEncryptCb<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void CyaSSL_CTX_SetMacEncryptCb(CYASSL_CTX*, CallbackMacEncrypt);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">typedef int (*CallbackMacEncrypt)(CYASSL* ssl, unsigned char* macOut,<br/></p>
<p class="paragraph_style_10">       const unsigned char* macIn, unsigned int macInSz, int macContent,<br/></p>
<p class="paragraph_style_10">       int macVerify, unsigned char* encOut, const unsigned char* encIn,<br/></p>
<p class="paragraph_style_10">       unsigned int encSz, void* ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to set the Atomic User Record Processing Mac/Encrypt Callback.  The callback should return 0 for success or &lt; 0 for an error.  The <span class="style_3">ssl</span> and <span class="style_3">ctx</span> pointers are available for the users convenience.  <span class="style_3">macOut</span> is the output buffer where the result of the mac should be stored.  <span class="style_3">macIn</span> is the mac input buffer and <span class="style_3">macInSz</span> notes the size of the buffer.  <span class="style_3">macContent</span> and <span class="style_3">macVerify</span> are needed for CyaSSL_SetTlsHmacInner() and be passed along as is.  <span class="style_3">encOut</span> is the output buffer where the result on the encryption should be stored.  <span class="style_3">encIn</span> is the input buffer to encrypt while <span class="style_3">encSz</span> is the size of the input.  An example callback can be found cyassl/test.h myMacEncryptCb().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">NA<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_SetMacEncryptCtx()<br/></p>
<p class="paragraph_style_10">CyaSSL_GetMacEncryptCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_23.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_SetMacEncryptCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void CyaSSL_SetMacEncryptCtx(CYASSL*, void* ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to set the Atomic User Record Processing Mac/Encrypt Callback Context to <span class="style_3">ctx</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">NA<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_SetMacEncryptCb()<br/></p>
<p class="paragraph_style_10">CyaSSL_GetMacEncryptCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_24.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_GetMacEncryptCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void* CyaSSL_GetMacEncryptCtx(CYASSL*);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to retrieve the Atomic User Record Processing Mac/Encrypt Callback Context previously stored with CyaSSL_SetMacEncryptCtx().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return a valid pointer to the context.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">NULL</span> will be returned for a blank context.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_SetMacEncryptCb()<br/></p>
<p class="paragraph_style_10">CyaSSL_SetMacEncryptCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_25.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_CTX_SetDecryptVerifyCb<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void CyaSSL_CTX_SetDecryptVerifyCb(CYASSL_CTX*, CallbackDecryptVerify);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">typedef int (*CallbackDecryptVerify)(CYASSL* ssl,<br/></p>
<p class="paragraph_style_10">       unsigned char* decOut, const unsigned char* decIn,<br/></p>
<p class="paragraph_style_10">       unsigned int decSz, int content, int verify, unsigned int* padSz,<br/></p>
<p class="paragraph_style_10">       void* ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to set the Atomic User Record Processing Decrypt/Verify Callback.  The callback should return 0 for success or &lt; 0 for an error.  The <span class="style_3">ssl</span> and <span class="style_3">ctx</span> pointers are available for the users convenience.  <span class="style_3">decOut</span> is the output buffer where the result of the decryption should be stored.  <span class="style_3">decIn</span> is the encrypted input buffer and <span class="style_3">decInSz</span> notes the size of the buffer.  <span class="style_3">content</span> and <span class="style_3">verify</span> are needed for CyaSSL_SetTlsHmacInner() and be passed along as is.  <span class="style_3">padSz</span> is an output variable that should be set with the total value of the padding.  That is, the mac size plus any padding and pad bytes.  An example callback can be found cyassl/test.h myDecryptVerifyCb().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">NA<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_SetMacEncryptCtx()<br/></p>
<p class="paragraph_style_10">CyaSSL_GetMacEncryptCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_26.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_SetDecryptVerifyCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void CyaSSL_SetDecryptVerifyCtx(CYASSL*, void* ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to set the Atomic User Record Processing Decrypt/Verify Callback Context to <span class="style_3">ctx</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">NA<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_SetDecryptVerifyCb()<br/></p>
<p class="paragraph_style_10">CyaSSL_GetDecryptVerifyCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_27.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_GetDecryptVerifyCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void* CyaSSL_GetDecryptVerifyCtx(CYASSL*);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to retrieve the Atomic User Record Processing Decrypt/Verify Callback Context previously stored with CyaSSL_SetDecryptVerifyCtx().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return a valid pointer to the context.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">NULL</span> will be returned for a blank context.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_SetDecryptVerifyCb()<br/></p>
<p class="paragraph_style_10">CyaSSL_SetDecryptVerifyCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_28.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_CTX_SetEccSignCb<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void CyaSSL_CTX_SetEccSignCb(CYASSL_CTX*, CallbackEccSign);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">typedef int (*CallbackEccSign)(CYASSL* ssl,<br/></p>
<p class="paragraph_style_10">       const unsigned char* in, unsigned int inSz,<br/></p>
<p class="paragraph_style_10">       unsigned char* out, unsigned int* outSz,<br/></p>
<p class="paragraph_style_10">       const unsigned char* keyDer, unsigned int keySz,<br/></p>
<p class="paragraph_style_10">       void* ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to set the Public Key Callback for ECC Signing.  The callback should return 0 for success or &lt; 0 for an error.  The <span class="style_3">ssl</span> and <span class="style_3">ctx</span> pointers are available for the users convenience.  <span class="style_3">in</span> is the input buffer to sign while <span class="style_3">inSz</span> denotes the length of the input.  out is the output buffer where the result of the signature should be stored.  <span class="style_3">outSz</span> is an input/output variable that specifies the size of the output buffer upon invocation and the actual size of the signature should be stored there before returning.  <span class="style_3">keyDer</span> is the ECC Private key in ASN1 format and <span class="style_3">keySz</span> is the length of the key in bytes.  An example callback can be found cyassl/test.h myEccSign().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">NA<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_SetEccSignCtx()<br/></p>
<p class="paragraph_style_10">CyaSSL_GetEccSignCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_29.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_SetEccSignCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void CyaSSL_SetEccSignCtx(CYASSL*, void* ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to set the Public Key Ecc Signing Callback Context to <span class="style_3">ctx</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">NA<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_SetEccSignCb()<br/></p>
<p class="paragraph_style_10">CyaSSL_GetEccSignCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_30.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_GetEccSignCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void* CyaSSL_GetEccSignCtx(CYASSL*);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to retrieve the Public Key Ecc Signing Callback Context previously stored with CyaSSL_SetEccSignCtx().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return a valid pointer to the context.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">NULL</span> will be returned for a blank context.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_SetEccSignCb()<br/></p>
<p class="paragraph_style_10">CyaSSL_SetEccSignCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_31.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_CTX_SetEccVerifyCb<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void CyaSSL_CTX_SetEccVerifyCb(CYASSL_CTX*, CallbackEccVerify);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">typedef int (*CallbackEccVerify)(CYASSL* ssl,<br/></p>
<p class="paragraph_style_10">       const unsigned char* sig, unsigned int sigSz,<br/></p>
<p class="paragraph_style_10">       const unsigned char* hash, unsigned int hashSz,<br/></p>
<p class="paragraph_style_10">       const unsigned char* keyDer, unsigned int keySz,<br/></p>
<p class="paragraph_style_10">       int* result, void* ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to set the Public Key Callback for ECC Verification.  The callback should return 0 for success or &lt; 0 for an error.  The <span class="style_3">ssl</span> and <span class="style_3">ctx</span> pointers are available for the users convenience.  <span class="style_3">sig</span> is the signature to verify and <span class="style_3">sigSz</span> denotes the length of the signature.  <span class="style_3">hash</span> is an input buffer containing the digest of the message and <span class="style_3">hashSz</span> denotes the length in bytes of the hash.  <span class="style_3">result</span> is an output variable where the result of the verification should be stored, <span class="style_3">1</span> for success and <span class="style_3">0</span> for failure.  <span class="style_3">keyDer</span> is the ECC Private key in ASN1 format and <span class="style_3">keySz</span> is the length of the key in bytes.  An example callback can be found cyassl/test.h myEccVerify().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">NA<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_SetEccVerifyCtx()<br/></p>
<p class="paragraph_style_10">CyaSSL_GetEccVerifyCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_32.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_SetEccVerifyCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void CyaSSL_SetEccVerifyCtx(CYASSL*, void* ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to set the Public Key Ecc Verification Callback Context to <span class="style_3">ctx</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">NA<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_SetEccVerifyCb()<br/></p>
<p class="paragraph_style_10">CyaSSL_GetEccVerifyCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_33.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_GetEccVerifyCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void* CyaSSL_GetEccVerifyCtx(CYASSL*);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to retrieve the Public Key Ecc Verification Callback Context previously stored with CyaSSL_SetEccVerifyCtx().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return a valid pointer to the context.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">NULL will be returned for a blank context.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_SetEccVerifyCb()<br/></p>
<p class="paragraph_style_10">CyaSSL_SetEccVerifyCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_34.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_CTX_SetRsaSignCb<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void CyaSSL_CTX_SetEccRsaCb(CYASSL_CTX*, CallbackRsaSign);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">typedef int (*CallbackRsaSign)(CYASSL* ssl,<br/></p>
<p class="paragraph_style_10">       const unsigned char* in, unsigned int inSz,<br/></p>
<p class="paragraph_style_10">       unsigned char* out, unsigned int* outSz,<br/></p>
<p class="paragraph_style_10">       const unsigned char* keyDer, unsigned int keySz,<br/></p>
<p class="paragraph_style_10">       void* ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to set the Public Key Callback for RSA Signing.  The callback should return 0 for success or &lt; 0 for an error.  The <span class="style_3">ssl</span> and <span class="style_3">ctx</span> pointers are available for the users convenience.  <span class="style_3">in</span> is the input buffer to sign while <span class="style_3">inSz</span> denotes the length of the input.  <span class="style_3">out</span> is the output buffer where the result of the signature should be stored.  <span class="style_3">outSz</span> is an input/output variable that specifies the size of the output buffer upon invocation and the actual size of the signature should be stored there before returning.  <span class="style_3">keyDer</span> is the RSA Private key in ASN1 format and <span class="style_3">keySz</span> is the length of the key in bytes.  An example callback can be found cyassl/test.h myRsaSign().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">NA<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_SetRsaSignCtx()<br/></p>
<p class="paragraph_style_10">CyaSSL_GetRsaSignCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_35.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_SetRsaSignCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void CyaSSL_SetRsaSignCtx(CYASSL*, void* ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to set the Public Key RSA Signing Callback Context to <span class="style_3">ctx</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">NA<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_SetRsaSignCb()<br/></p>
<p class="paragraph_style_10">CyaSSL_GetRsaSignCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_36.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_GetRsaSignCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void* CyaSSL_GetRsaSignCtx(CYASSL*);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to retrieve the Public Key RSA Signing Callback Context previously stored with CyaSSL_SetRsaSignCtx().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return a valid pointer to the context.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">NULL</span> will be returned for a blank context.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_SetRsaSignCb()<br/></p>
<p class="paragraph_style_10">CyaSSL_SetRsaSignCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_37.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_CTX_SetRsaVerifyCb<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void CyaSSL_CTX_SetRsaVerifyCb(CYASSL_CTX*, CallbackRsaVerify);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">typedef int (*CallbackRsaVerify)(CYASSL* ssl,<br/></p>
<p class="paragraph_style_10">       unsigned char* sig, unsigned int sigSz,<br/></p>
<p class="paragraph_style_10">       unsigned char** out,<br/></p>
<p class="paragraph_style_10">       const unsigned char* keyDer, unsigned int keySz,<br/></p>
<p class="paragraph_style_10">       void* ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to set the Public Key Callback for RSA Verification.  The callback should return the number of plaintext bytes for success or &lt; 0 for an error.  The <span class="style_3">ssl</span> and <span class="style_3">ctx</span> pointers are available for the users convenience.  <span class="style_3">sig</span> is the signature to verify and <span class="style_3">sigSz</span> denotes the length of the signature.  <span class="style_3">out</span> should be set to the beginning of the verification buffer after the decryption process and any padding.  <span class="style_3">keyDer</span> is the RSA Public key in ASN1 format and <span class="style_3">keySz</span> is the length of the key in bytes.  An example callback can be found cyassl/test.h myRsaVerify().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">NA<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_SetRsaVerifyCtx()<br/></p>
<p class="paragraph_style_10">CyaSSL_GetRsaVerifyCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_38.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_SetRsaVerifyCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void CyaSSL_SetRsaVerifyCtx(CYASSL*, void* ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to set the Public Key RSA Verification Callback Context to <span class="style_3">ctx</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">NA<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_SetRsaVerifyCb()<br/></p>
<p class="paragraph_style_10">CyaSSL_GetRsaVerifyCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_39.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_GetRsaVerifyCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void* CyaSSL_GetRsaVerifyCtx(CYASSL*);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to retrieve the Public Key RSA Verification Callback Context previously stored with CyaSSL_SetRsaVerifyCtx().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return a valid pointer to the context.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">NULL</span> will be returned for a blank context.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_SetRsaVerifyCb()<br/></p>
<p class="paragraph_style_10">CyaSSL_SetRsaVerifyCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_40.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_CTX_SetRsaEncCb<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void CyaSSL_CTX_SetRsaEncCb(CYASSL_CTX*, CallbackRsaEnc);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">typedef int (*CallbackRsaEnc)(CYASSL* ssl,<br/></p>
<p class="paragraph_style_10">       const unsigned char* in, unsigned int inSz,<br/></p>
<p class="paragraph_style_10">       unsigned char* out, unsigned int* outSz,<br/></p>
<p class="paragraph_style_10">       const unsigned char* keyDer, unsigned int keySz,<br/></p>
<p class="paragraph_style_10">       void* ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to set the Public Key Callback for RSA Public Encrypt.  The callback should return 0 for success or &lt; 0 for an error.  The <span class="style_3">ssl</span> and <span class="style_3">ctx</span> pointers are available for the users convenience.  <span class="style_3">in</span> is the input buffer to encrypt while <span class="style_3">inSz</span> denotes the length of the input.  <span class="style_3">out</span> is the output buffer where the result of the encryption should be stored.  <span class="style_3">outSz</span> is an input/output variable that specifies the size of the output buffer upon invocation and the actual size of the encryption should be stored there before returning.  <span class="style_3">keyDer</span> is the RSA Public key in ASN1 format and <span class="style_3">keySz</span> is the length of the key in bytes.  An example callback can be found cyassl/test.h myRsaEnc().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">NA<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_SetRsaEncCtx()<br/></p>
<p class="paragraph_style_10">CyaSSL_GetRsaEncCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_41.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_SetRsaEncCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void CyaSSL_SetRsaEncCtx(CYASSL*, void* ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to set the Public Key RSA Public Encrypt Callback Context to <span class="style_3">ctx</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">NA<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_SetRsaEncCb()<br/></p>
<p class="paragraph_style_10">CyaSSL_GetRsaEncCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_42.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_GetRsaEncCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void* CyaSSL_GetRsaEncCtx(CYASSL*);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to retrieve the Public Key RSA Public Encrypt Callback Context previously stored with CyaSSL_SetRsaEncCtx().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return a valid pointer to the context.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">NULL</span> will be returned for a blank context.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_SetRsaEncCb()<br/></p>
<p class="paragraph_style_10">CyaSSL_SetRsaEncCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_43.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_CTX_SetRsaDecCb<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void CyaSSL_CTX_SetRsaDecCb(CYASSL_CTX*, CallbackRsaDec);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">typedef int (*CallbackRsaDec)(CYASSL* ssl,<br/></p>
<p class="paragraph_style_10">       unsigned char* in, unsigned int inSz,<br/></p>
<p class="paragraph_style_10">       unsigned char** out,<br/></p>
<p class="paragraph_style_10">       const unsigned char* keyDer, unsigned int keySz,<br/></p>
<p class="paragraph_style_10">       void* ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to set the Public Key Callback for RSA Private Decrypt.  The callback should return the number of plaintext bytes for success or &lt; 0 for an error.  The <span class="style_3">ssl</span> and <span class="style_3">ctx</span> pointers are available for the users convenience.  <span class="style_3">in</span> is the input buffer to decrypt and <span class="style_3">inSz</span> denotes the length of the input.  <span class="style_3">out</span> should be set to the beginning of the decryption buffer after the decryption process and any padding.  <span class="style_3">keyDer</span> is the RSA Private key in ASN1 format and <span class="style_3">keySz</span> is the length of the key in bytes.  An example callback can be found cyassl/test.h myRsaDec().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">NA<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_SetRsaDecCtx()<br/></p>
<p class="paragraph_style_10">CyaSSL_GetRsaDecCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_44.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_SetRsaDecCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void CyaSSL_SetRsaDecCtx(CYASSL*, void* ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to set the Public Key RSA Private Decrypt Callback Context to <span class="style_3">ctx</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">NA<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_SetRsaDecCb()<br/></p>
<p class="paragraph_style_10">CyaSSL_GetRsaDecCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_45.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12">CyaSSL_GetRsaDecCtx<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void* CyaSSL_GetRsaDecCtx(CYASSL*);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">Allows caller to retrieve the Public Key RSA Private Decrypt Callback Context previously stored with CyaSSL_SetRsaDecCtx().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return a valid pointer to the context.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">NULL</span> will be returned for a blank context.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_SetRsaDecCb()<br/></p>
<p class="paragraph_style_10">CyaSSL_SetRsaDecCtx()<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_46.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
</div>
<div style="clear: both; height: 0px; line-height: 0px; " class="tinyText"> </div>
</div>
</div>
<div style="height: 16px; width: 20px;  height: 16px; left: 706px; position: absolute; top: 51px; width: 20px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 20px; ">
<img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/shapeimage_47.png" alt="" style="height: 16px; left: 0px; position: absolute; top: 0px; width: 20px; "/>
</div>
</div>
<div style="height: 19px; width: 19px;  height: 19px; left: 707px; position: absolute; top: 25px; width: 19px; z-index: 1; " class="tinyText style_SkipStroke_2">
<img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/United%20Kingdom(Great%20Britain).png" alt="" style="border: none; height: 19px; width: 19px; "/>
</div>
<div id="id17" style="height: 23px; left: 328px; position: absolute; top: 48px; width: 258px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_258_23" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_16">Questions? +1 (425) 245-8247</p>
</div>
</div>
</div>
<div style="height: 19px; width: 19px;  height: 19px; left: 685px; position: absolute; top: 25px; width: 19px; z-index: 1; " class="tinyText style_SkipStroke_2">
<a href="http://www.wolfssl.jp/" title="http://www.wolfssl.jp"><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/japan.png" alt="" style="border: none; height: 19px; width: 19px; "/></a>
</div>
<div id="id18" style="height: 28px; left: 593px; position: absolute; top: 44px; width: 119px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_119_28" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_17"><a class="class14" title="https://www.wolfssl.com/forums" href="https://www.wolfssl.com/forums">Support <span class="style_5">Forums</span></a></p>
</div>
</div>
</div>
<div style="height: 121px; width: 155px;  height: 121px; left: 32px; position: absolute; top: 5px; width: 155px; z-index: 1; " class="tinyText style_SkipStroke_2">
<a href="Home.html" title="Home.html"><img src="Docs-wolfssl-manual-17-4-wolfssl-api-callbacks_files/wolfssl_logo.png" alt="" style="border: none; height: 121px; width: 156px; "/></a>
</div>
<div style="height: 15827px; line-height: 15827px; " class="spacer"> </div>
</div>
<div style="height: 100px; margin-left: 0px; position: relative; width: 770px; z-index: 15; " id="footer_layer">
<div style="height: 0px; line-height: 0px; " class="bumper"> </div>
<div id="id19" style="height: 27px; left: 634px; position: absolute; top: 27px; width: 102px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_102_27" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_4"><a class="class15" title="Docs-wolfssl-manual-17-5-wolfssl-api-error-debugging.html" href="Docs-wolfssl-manual-17-5-wolfssl-api-error-debugging.html">Next Chapter</a></p>
</div>
</div>
</div>
<div id="id20" style="height: 25px; left: 35px; position: absolute; top: 27px; width: 125px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_125_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_18"><a class="class16" title="Docs-wolfssl-manual-17-3-wolfssl-api-context-session-setup.html" href="Docs-wolfssl-manual-17-3-wolfssl-api-context-session-setup.html">Previous Chapter</a></p>
</div>
</div>
</div>
<div id="id21" style="height: 25px; left: 323px; position: absolute; top: 27px; width: 125px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_125_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_7"><a class="class17" title="Docs-wolfssl-manual-toc.html" href="Docs-wolfssl-manual-toc.html">Table of Contents</a></p>
</div>
</div>
</div>
<div id="id22" style="height: 29px; left: 35px; position: absolute; top: 65px; width: 701px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_701_29" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_19">Copyright 2017 wolfSSL Inc.  All rights reserved.</p>
</div>
</div>
</div>
</div>
</div>
</div>
 </body>

<!-- Mirrored from www.wolfssl.com/wolfSSL/Docs-wolfssl-manual-17-4-wolfssl-api-callbacks.html by HTTrack Website Copier/3.x [XR&CO'2014], Tue, 17 Jan 2017 13:34:18 GMT -->
</html>
